#include <iostream>
#include <cstring>

using namespace std;

// 什么情况使用new，什么情况使用malloc

class Animal {
public:
    char *name;

    Animal(char *name) {
        // 构造方法使用此种方式赋值，main方法的name内存释放，成员变量也会释放
        //this->name = name;

        // 一般需要使用动态内存申请
        // +1是因为字符串以\0结尾 例如abc->"abc\0"
        this->name = (char *) malloc(strlen(name) + 1);
        // 内存拷贝一次，外部释放了，内部还存在
        memcpy(this->name, name, strlen(name) + 1);
    }
};

int main24() {
    char *name = (char *) malloc(sizeof(100));
    Animal *animal = new Animal(name);
    free(name);
    return 0;
}